package com.ctsi.organise.common.api;

import com.ctsi.organise.common.model.Organise;
import com.ctsi.organise.common.model.Person;
import com.ctsi.security.domain.SRole;

import java.util.List;

public interface PersonServiceProxy {
	

	 Person findPersonById(String id);
	/**
	 * 根据一组partyids获得人员
	 * @param partyids
	 * @return
	 */
	 List<Person> findPersonByPartyIds(List<String> partyids);
	
	/**
	 * 根据组织Id查找出组织
	 * @param partyId
	 * @return
	 */
	 List<Organise> findUserLoginByPartyId(String partyId);
	/**
	 * 得到人员的组织
	 * @param partyId
	 * @return
	 */
	 Organise getDefaultOrgan(String partyId);

	/**
	 * 
	 * @param organ
	 * @return
	 */
	 Organise findOrganTypeById(Organise organ) ;
	 Organise getOrganTypeById(Organise organ, Integer typeId);

	/**
	 * 根据人员ID获得具有的角色
	 * @param partyid
	 * @return
	 */
	 List<String> getPersonRoleId(String partyid);
	/**
	 * 根据PartyId返回该人员所具有的所有角色
	 * @param partyid
	 * @return
	 */
	 List<? extends SRole> getRolesByPartyId(String partyid);
	/**
	 * 获取该人员的根组织
	 * @param personId
	 * @return
	 */
	 Organise getRootOrgan(String personId) ;
	/**
	 * 根据人员Id，获得其下属的Ids（跨部门，按部门排序，取第一个）
	 * @param personId
	 * @return
	 */
	 List<String> getUnderMemberIds(String personId);
	/**
	 * 根据人员Id及部门Id，获得其下属的Ids
	 * @param personId
	 * @param organId
	 * @return
	 */
	 List<String> getUnderMemberIdsByOrg(String personId, String organId);
	
	/**
	 * 找到该人员所在部门
	 * 
	 * @param partyid
	 * @return
	 */
	 List<Organise> getBelongOrgan(String partyid);
	/**
	 * 得到人员的相对顺序
	 * @return
	 */
	 int getPersonRelOrder(String partyid);
	/**
	 * 返回法人组织
	 * @param partyid
	 * @return
	 */
	 Organise getCorpByPersonPartyId(String partyid);

	/**
	 * 给出一个无序的人员序列，返回按人员顺序排序的序列<br>
	 * 数据可能会增加，因为，人员的组织不同
	 * 
	 * @param personIds
	 *            人员ID的列表
	 * @return
	 */
	 List<Person> sortPersonIdList(List<String> personIds);
	
	/**
	 * 得到人员的信息
	 * @param list
	 * @return
	 */
	 List<Person> findWfPersonInfo(List<String> list);
	
	 int findOrderInOrgan(String organId, String personId) ;
	/**
	 * 返回人员所属组织链
	 * 
	 * @param partyid
	 * @return
	 */
	 List<? extends Organise> getPesonAsc(String partyid) ;
	/**
	 * 根据用户的姓名模糊查询返回partyids列表,不控制数据权限
	 * @param name
	 * @return
	 */
	 List<String> getPersonloginIdsByName(String name);

	 void addPerson(Person person);
	
	 void updatePerson(Person person);
	
	 int physicalDelPerson(String partyId);
	
	 void addPersonWithLoginAcc(Person person, String loginId, String password) ;

	/**
	 * 根据人员id获取所在部门
	 * @param userId
	 * @return
	 */
	public Organise getDepart4User( String userId);

	/**
	 * 根据人员id获取所在的组织，type = MINORGAN
	 * @param userId
	 * @return
	 */
	public Organise getOrganise4User( String userId);
}
